Manipulating graphical objects

ABSTRACT

In one example, a method for rendering graphical objects on a display includes rendering each of a plurality of graphical objects within respective layers. The plurality of graphical objects includes first, second and third graphical objects. The second graphical object is directly linked to the first graphical object and the third graphical object is directly linked to the second graphical object. The method additionally includes receiving user input manipulating one of the graphical objects in a manner that affects a directly linked graphical object. The method additionally includes re-rendering the manipulated graphical object and the directly linked graphical object without re-rendering graphical objects that are not directly linked to the manipulated graphical object.

BACKGROUND

1. Field of the Invention

The present invention relates generally to graphical objects. Moreparticularly, some example embodiments relate to rendering andmanipulating complex graphical objects.

2. Related Technology

Existing techniques for drawing, displaying, and/or manipulatinggraphical objects in web applications using native browser functionalityare slow. This is seen when objects move on/across the screen or whenusers interact with graphical objects.

Typically, the entire working area that the user sees is redrawn everytime an object moves. This is due to the existing implementations ofnative browser drawing capabilities. In the case of the HTML5 canvaselement, the entire drawing area is a single raster device, and must beredrawn from scratch on most changes. In the case of SVG (scalablevector graphics), even the simplest changes to the markup representingthe final object display can require the browser to “re-flow” andre-render the entire scene.

Hence the responsiveness of graphical applications delivered in abrowser is often poor, frequently resulting in a visual latency or lagthat causes a poor user experience. Alternatively, instead of givingusers a real-time dynamic view of what changes will look like, many webbased applications only provide a limited representation of tentativechanges being made before the change is committed. For example, when auser clicks on an object and drags it with a mouse to move it, manyapplications will only show an outline or shadow of the object movealong with the user's mouse cursor; it is only when the user releasesthe click (to confirm the move) that the object—and the page—is redrawnwith the object in its new location and the rest of the page updatedaccordingly.

As a result, many “rich internet applications” delivered over the webmake use of non-native browser technologies, such as browser plugins,e.g., Flash, Java or Silverlight, that make use of precompiled coderunning on virtual machines to allow rendering of and interaction withgraphic elements. With plugins such as Flash, however, each time achange is made in code, the code must be re-compiled into a .swf (“SmallWeb Format” or “ShockWave Flash”) file and uploaded to the server. Theend-user must consequently re-download the entire application binary.These technologies also limit the deployment of the application to thoseplatforms that support the required plugin.

Building on a proprietary plugin like Flash also restricts applicationsfrom using standard form controls that are common in web sites and webapplications. This makes the whole user experience of Flash applicationssignificantly different from that of other web applications, which cancause frustration and confusion for users.

Allowing other developers to create extensions for an application isdifficult with Flash and similar technologies due to their closed,compiled nature. In addition, generating graphical output that isconsistent across different browsers or different file types isdifficult. For example, different browsers use different renderingtechniques for graphics—Internet Explorer uses VML, whereas many otherbrowsers support Canvas—so that building applications that present aconsistent output across different browsers is difficult. The mainchallenge is that different output devices, such as different browsers,file formats, or image generation libraries, implement different subsetsof common rendering functionality. Furthermore, outputting what the usersees in the browser to different file formats (such as vector PDF, forprinting, or image formats such as PNG) in a consistent manner so thatwhat is seen in the browser is the same as the PDF/PNG is alsochallenging.

The subject matter claimed herein is not limited to embodiments thatsolve any disadvantages or that operate only in environments such asthose described above. Rather, this background is only provided toillustrate one exemplary technology area where some embodimentsdescribed herein may be practiced

BRIEF SUMMARY OF SOME EXAMPLE EMBODIMENTS

In general, some embodiments disclosed herein relate to rendering andmanipulating graphical objects.

In one example embodiment, a method for rendering graphical objects on adisplay includes rendering each of a plurality of graphical objectswithin respective layers. The plurality of graphical objects includesfirst, second and third graphical objects. The second graphical objectis directly linked to the first graphical object and the third graphicalobject is directly linked to the second graphical object. The methodadditionally includes receiving user input manipulating one of thegraphical objects in a manner that affects a directly linked graphicalobject. The method additionally includes re-rendering the manipulatedgraphical object and the directly linked graphical object withoutre-rendering graphical objects that are not directly linked to themanipulated graphical object.

In another example embodiment, a method of representing and renderinggraphical objects includes separating information for rendering agraphical object into a plurality of sets defining attributes of thegraphical object, the graphical object configured to render within alocal graphics context of a layer. The method additionally includescreating the layer at a particular position of a viewport having aglobal graphics context defining a global coordinate frame. The methodadditionally includes translating and scaling the local graphics contextto match the global graphics context. The method additionally includesrendering the graphical object at the particular position of theviewport within the layer using the global coordinate frame.

In yet another example embodiment, a method of demonstrating theoperation of an application includes receiving, from one or more inputdevices connected to a computing device, user input effective toinitiate a demonstration of an application, the application beingexecutable by the computing device. The method additionally includesinitiating the demonstrating by generating input for the applicationbased on simulated user actions. The method additionally includesexecuting the application using the generated input. Executing theapplication using the generated input includes creating and rendering aplurality of graphical objects on a display connected to the computingdevice in response to first generated input. Executing the applicationusing the generated input additionally includes, in response to secondgenerated input effective to manipulate one or more of the plurality ofgraphical objects, updating and re-rendering on the display one or moreof the plurality of graphical objects affected by the manipulationsubstantially in real time as the manipulation occurs while continuouslydisplaying all of the plurality of graphical objects unaffected by themanipulation.

In yet another example embodiment, a method for rendering graphicalobjects on a display includes receiving user input causing a firstgraphical object to be drawn on a display, the first graphical objectbeing rendered in a first layer. The method additionally includesreceiving user input causing a second graphical object to be drawn onthe display, the second graphical object being rendered in a secondlayer different from the first layer, the first and second graphicalobjects being rendered simultaneously visible on the display. The methodadditionally includes receiving user input causing a connector to bedrawn on the display, the connector connecting the first and secondgraphical objects and being rendered in a third layer different from thefirst and second layers. The method additionally includes receiving userinput manipulating the first graphical object connected by the connectorto the second graphical object. The method additionally includescontinuously updating and rendering the first graphical object, secondgraphical object and connector in response to and during themanipulating substantially in real time. During the continuous updatingand rendering, the first graphical object in the first layer is redrawnand the connector in the third layer is redrawn without redrawing thesecond graphical object in the second layer.

In yet another example embodiment, a method for rendering graphicalinformation on a display includes storing data for rendering a graphicalobject in an intermediate data structure including a plurality ofinformation items defining attributes of the graphical object. Themethod additionally includes rendering the attributes of the graphicalobject based on the plurality of information items. The methodadditionally includes displaying the graphical object on a display basedon the rendered attributes. The method additionally includes receivinguser input that causes at least some of the plurality of informationitems to change. The method additionally includes re-rendering some, butnot all, of the attributes of the graphical object based on the changedinformation items.

Additional features and advantages of the invention will be set forth inthe description which follows, and in part will be obvious from thedescription, or may be learned by the practice of the invention. Thefeatures and advantages of the invention may be realized and obtained bymeans of the instruments and combinations particularly pointed out inthe appended claims. These and other features of the present inventionwill become more fully apparent from the following description andappended claims, or may be learned by the practice of the invention asset forth hereinafter.

BRIEF DESCRIPTION OF THE DRAWINGS

To further clarify the above and other advantages and features of thepresent invention, a more particular description of the invention willbe rendered by reference to specific embodiments thereof which areillustrated in the appended drawings. It is appreciated that thesedrawings depict only typical embodiments of the invention and aretherefore not to be considered limiting of its scope. The invention willbe described and explained with additional specificity and detailthrough the use of the accompanying drawings in which:

FIG. 1 illustrates a viewport of a user interface according to someembodiments;

FIGS. 2A-2B illustrate examples of some objects that can be rendered inthe viewport of FIG. 1;

FIG. 3 depicts an example hardware configuration for a client device inwhich some embodiments can be implemented;

FIG. 4 illustrates an example intermediate data structure used torepresent and describe how an object is to be rendered according to someembodiments;

FIGS. 5A-5L depict aspects of an example user interface in which objectscan be rendered;

FIG. 6A is a flowchart of an example method for rendering graphicalobjects on a display of a client device;

FIG. 6B is a flowchart of another example method for rendering graphicalobjects on a display of a client device;

FIG. 7A is a flowchart of an example method for representing andrendering graphical objects on a display of a client device;

FIG. 7B is a flowchart of an example method for editing text of anobject;

FIG. 8 is a flowchart of an example method for rendering graphicalinformation on a display; and

FIG. 9 is a flowchart of an example method for demonstrating theoperation of an application.

DETAILED DESCRIPTION OF SOME EXAMPLE EMBODIMENTS

Embodiments of the invention generally relate to rendering andmanipulating graphical objects (hereinafter “objects”) in a web browseror other application. As used herein, “manipulating” an object includesmoving, resizing, or changing some other attribute of the object. Insome embodiments, each object is rendered in a different layer thanother objects. Accordingly, when an object is manipulated, someembodiments permit the manipulated object to be re-rendered in itsrespective layer without re-rendering other unaffected objects indifferent layers.

Alternately or additionally, information to render an object isseparated into different sets defining different attributes of theobject. When one attribute of the object is changed, the changedattribute can be re-rendered without re-rendering unaffected attributesof the object.

Reference will now be made to the drawings to describe various aspectsof example embodiments of the invention. It is to be understood that thedrawings are diagrammatic and schematic representations of such exampleembodiments, and are not limiting of the present invention, nor are theynecessarily drawn to scale.

I. First Example Embodiment

With reference first to FIG. 1, one example embodiment is disclosed.FIG. 1 illustrates a viewport 100 of a user interface (“UI”) accordingto some embodiments. The viewport 100 is hereinafter referred to as theUI viewport 100. The UI viewport 100 includes first, second and thirdobjects 101, 102, 103. In the illustrated embodiment, the first andsecond objects 101, 102 are directly linked together and the second andthird objects 102, 103 are directly linked together. As used herein, twoobjects are “directly” linked together if they are linked togetherwithout any intervening objects.

Additionally, the first object 101 is a process block. The second object102 is a connector. The third object 103 is a decision block. Moregenerally, the objects 101-103 can be any object.

FIGS. 2A and 2B illustrate examples of some objects that can be renderedin the viewport 100 of FIG. 1. The objects illustrated in FIGS. 2A and2B are organized into libraries based on a correspondence with otherobjects in the library. For instance, as illustrated in FIG. 2A, aflowchart library 201 includes objects that are used in flowcharts.Other libraries illustrated in FIG. 2A include a container library 202,shape library 203, user interface library 204, organizational chartlibrary 205, unified modeling language (“UML”) class diagram library206, UML sequence library 207, UML state/activity library 208, UML usecase library 209, network library 210, electronics library 211 and audioequipment library 212. Various libraries illustrated in FIG. 2B includea standard library 213, smartphone element library 214, smartphonecontrols library 215 and smartphone icons library 216.

Some embodiments may alternately or additionally include various othertypes of objects that are not shown in FIGS. 2A-2B. By way of exampleand not limitation, these other objects may include objects related tofamily trees/genograms/genographs, timelines, educational uses (e.g.,Venn diagrams, math and grammar instruction, storyboards for writinginstruction, or the like), business process models, timelines, roomlayout/interior design, floorplans, landscaping/landscape design,apparel/fashion, or the like.

Alternately or additionally, some embodiments may include images and/orother objects selected by a user or associated with a user or group ofusers. By way of example and not limitation, a user may select images orother objects stored locally on a client device, and/or images or otherobjects stored or available elsewhere (e.g., on a network, including butnot limited to the public Internet), and organize these user-selectedobjects in a library or libraries. According to some embodiments, theseobjects may be selected by “dragging and dropping” such objects to theviewport 100, from any one of a variety of source locations such as, forexample, a client desktop or local file system, or from a web pagedisplayed on the client device. Similarly, objects and/or libraries maybe selected by or associated with a group, such as a work group (forexample, company logos, images, templates, etc.), a group of friends orinferred friends, a group with common or similar interests (known orinferred), according to any method now known or later developed. Inthese and other embodiments, the organization of objects into librariesmay serve to help users more easily locate desired objects. In otherembodiments, the objects are not organized into libraries.

One or more of the libraries 201-216 may be provided in a toolbar in thesame UI as the UI viewport 100 of FIG. 1. In these and otherembodiments, a user can create an object at a particular location in theUI viewport 100 by dragging an object from the toolbar and dropping itat the particular location in the UI viewport 100. Alternately oradditionally, in response to the user creating a particular object, aset of objects that are likely to follow the particular object arepresented to the user in the UI viewport 100. In response to the userselecting one of the objects from the set, the selected object iscreated in the UI viewport 100 following the particular object withoutthe user performing a drag and drop operation.

Returning to FIG. 1, each of the objects 101-103 is rendered within acorresponding first layer 104, second layer 105 or third layer 106,denoted in FIG. 1 by the dashed line surrounding each object. Each layer104-106 includes a single object 101-103 in the example of FIG. 1.Alternately or additionally, each layer 104-106 includes more than oneobject. In some embodiments, each layer 104-106 is an HTML5 canvaselement or other layer suitable for providing the functionalitydescribed herein. Additionally, in the example of FIG. 1, each of thelayers 104-106 is slightly larger than the corresponding object 101-103rendered therein.

The UI viewport 100 is displayed on a display of a client device. Theclient device has one or more input devices, such as a keyboard, mouse,or the like, and/or the display may be a touchscreen display capable ofreceiving user input. In the illustrated embodiment, the client deviceon which the UI viewport 100 is displayed includes a mouse representedby a mouse cursor 107 in the UI viewport 100. The mouse or other inputdevice permits a user to manipulate the objects 101-103 in the presentexample. Briefly, for instance, the user may operate the mouse or use atouchscreen interface to move or resize one of the objects 101-103,connect two objects together, or change some other attribute of anobject.

According to some embodiments, rendering objects 101-103 withindifferent layers 104-106 minimizes processing overhead for re-renderingthe UI viewport 100 when one of the objects 101-103 is manipulated suchas when one of the objects 101-103 is moved. In this and otherembodiments, the moved object and one or more objects directly linked tothe moved object are re-rendered in their respective layers while otherobjects not directly linked to the moved object are not re-rendered.

For instance, when the first object 101 is moved, the first object 101is continuously re-rendered in the first layer 104. Because the secondobject 102 is directly linked to the first object 101, the second object102 is affected in some embodiments by the movement of the first object101. Accordingly, the second object 102 is continuously re-rendered inthe second layer 105 while the first object 101 is being moved in thisexample. Moreover, because the third object 103 is not directly linkedto the first object 101, the third object 103 is not re-rendered.

II. Hardware Configuration

Turning next to FIG. 3, an example hardware configuration for a clientdevice 300 or other computing device is disclosed in which someembodiments can be implemented. The client device 300 may be configured,for example, to communicate over a network 302 with a server 304. Theclient device 300 includes a central processing unit 306, such as amicroprocessor, and a number of other units interconnected via a systembus 308. The other units include Read Only Memory (“ROM”) 310, RandomAccess Memory (“RAM”) 312, an input/output (“I/O”) adapter 314 forconnecting peripheral devices such as disk storage units 316 to thesystem bus 308, a user interface adapter 318 for connecting a keyboard320, a mouse 322, a speaker 324, a microphone 326, a touchscreeninterface 327 and/or other user interface devices to the bus 308, acommunication adapter 328 for communicating over the network 302, and adisplay adapter 330 for connecting the bus 308 to a display device 332.

The client device 300 typically has resident thereon a suitableoperating system (“OS”) such as a Microsoft Windows OS (e.g., 7, Vista,XP), a MAC OS, a Unix OS, a Linux OS, a mobile OS (e.g. iPhone OS,Windows Mobile, Symbian, Android OS, Blackberry OS, etc.) or othersuitable OS. Those skilled in the art will appreciate that theembodiments disclosed herein may alternately be implemented on platformsand operating systems other than those explicitly mentioned herein.

In some embodiments, the client device 300 executes a web browser todownload and interact with web pages hosted by the server 304. The webbrowser may be loaded to RAM 312 or stored in some other computerstorage and executed by the CPU 306, for instance. One or more of theweb pages provided by the server 304 to the client device 300 mayinclude a runtime script. The runtime script is JavaScript in someexamples.

Alternately or additionally, the runtime script includes instructionsexecutable by the client device 300 to perform one or more of themethods described herein.

III. Object Representation

As described above with respect to FIG. 1, some embodiments minimizeprocessing overhead by rendering objects 101-103 within different layers104-106. Alternately or additionally, processing overhead may beminimized by separating information for rendering an object intomultiple information sets defining different attributes of the object.By separating the rendering information into information sets definingdifferent attributes, a change to a single attribute can be effectuatedby re-rendering the single attribute without re-rendering otherattributes defined by other information sets.

In this and other examples, each object to be rendered is represented inan intermediate data structure describing how the object is to berendered. For instance, FIG. 4 illustrates an example intermediate datastructure 400 used to represent and describe how an object may berendered. The intermediate data structure 400 includes a plurality ofinformation sets 402 and 404 defining attributes of the object. In thisexample, the first information set 402 generally defines an outline ofthe object and the second information set 404 generally defines a richtext area of the object.

In more detail, the first information set 402 defines one or more of acolor 406 of a line making up the outline of the object, a weight 408 ofthe line making up the outline, a gradient 410 (e.g., solid, dashed,dotted) of the line making up the outline, a shape 412 of an areabounded by the outline, a fill color 414 of the area bounded by theoutline, a fill gradient 416 of the fill color and a transparency level418 of the fill color.

The shape 412 information may include one or more commands defining theshape of the object's outline. “Move,” “line,” “quadratic Bezier curve,”and “close shape” commands are examples of commands that can be includedin the shape 412 information to define the shape of the object'soutline.

The first information set 402 may omit some or all of the foregoingrendering information depending on the object represented by theintermediate data structure 400. For instance, fill color 414, fillgradient 416 and transparency 418 may be omitted from the firstinformation set 402 for an object such as the connector 102 of FIG. 1 insome examples. Other embodiments of the invention may includingadditional or different rendering information not represented in FIG. 4,such as, without limitation, rendering information defining a number ofbuttons to include in toolbar object or other object, renderinginformation defining corner effects (e.g., how soft or round to makecorners), rendering information defining a geometric transformation ofan object (e.g., rotation angle, stretch, skew), rendering informationdefining one or more other effects (e.g., a drop shadow under an object,the size, projection angle, or thickness of the drop shadow, 3-D effectssuch as extrusion effects), rendering information defining Booleancombinations of different objects to create a single object, or the likeor any combination thereof. More generally, the rendering informationincluded in the intermediate data structure 400 can include any type ofinformation that could be used in determining how to render an object.

The second information set 404 defines one or more of a bounding box 420in relation to the object outline and within which rich text is renderedand a canonical representation 422 of the rich text. In someembodiments, the canonical representation 422 of the rich text is anextensible markup language (“XML”) representation of the rich textspecifying one or more of color, font, bold, italics, underline, size orother aspects of the rich text. In these and certain other embodiments,the XML somewhat resembles hypertext markup language (“HTML”) and can bederived from any valid HTML. Text is edited by translating the canonicalrepresentation into rich text such as HTML, receiving user inputeffective to edit the text through a browser- or other application-basedrich-text editor, and then translating the result back into thecanonical representation.

Decomposing complex rendering information for each object in a file intothe limited information included in the intermediate data structure 400of FIG. 4 ensures, in some examples, a consistent output irrespective ofthe file type of the output file, or the browser or other applicationused to view the file. For instance, while some web browsers supportdrawing circles, the portable document format (“PDF”) does not. Byapproximating circles using quadratic Bezier curves, the intermediatedata structure 400 permits circles to be rendered consistently by webbrowsers, in PDF format, and by other applications or in other formats.

Alternately or additionally, decomposing the rendering information intolimited information included in an intermediate data structure canresult in less processing and faster rendering of an object whenattributes of the object are changed. For example, when only an outlineof an object is changed, the outline can be re-rendered withoutre-rendering text of the object. As another example, when only text ofan object is changed, the text can be re-rendered without re-renderingthe outline of the object. By re-rendering only those attributes of anobject that are affected by changes, it takes relatively less processingpower and time to re-render an object compared to re-rendering everyattribute of the object whether or not every attribute is affected by agiven change.

The information sets 402, 404 and rendering information 406, 408, 410,412, 414, 416, 418, 420, 422 are provided by way of example only andshould not be construed to limit the invention. For instance,intermediate data structure 400 according to embodiments of theinvention may include more than two information sets 402, 404 and/ordifferent information sets than information sets 402, 404, such as (byway of example and not limitation) an information set generally definingsemantic attributes of the object, or other information sets. Similarly,rendering information according to various embodiments of the inventionmay include different and/or additional rendering information, such as(by way of example and not limitation) rendering information definingwhether an object represents an interface, rendering informationdefining whether an object is to be included in one but not both of adisplayed and printed version of a document, rendering informationdefining a number of drop-down items associated with an object,rendering information defining a uniform resource identifier (“URI”), orother rendering information.

IV. User Interface

FIGS. 5A-5L depict aspects of an example UI 500 in which objects can berendered according to some embodiments. The UI 500 may be providedthrough a web browser or other suitable application. As shown in FIGS.5A-5C, the UI 500 includes a UI viewport 502 wherein a document isdisplayed. The document includes the objects 101-103 of FIG. 1. Mousecursor 107 represents a mouse operated by the user to navigate the UI500. In other embodiments, a user navigates the UI 500 using atouchscreen interface. For simplicity, however, interactions with the UI500 will be described in terms of a mouse/mouse cursor 107, with theunderstanding that any other suitable input means can be implemented tonavigate the UI 500.

One or more of the object libraries 201-216 of FIGS. 2A-2B are providedin a scrollable toolbar 504 along the left edge of the UI 500.Optionally, each object library 201-216 can be collapsed or expanded byclicking the header containing the name (e.g., “FLOWCHART,”“CONTAINERS,” “SHAPES,” etc.) of the object library 201-216. Alternatelyor additionally, a button 506 provided at the bottom of the toolbar 504can be used to completely remove an object library 201-216 from thetoolbar 504 or add a new object library 201-216 to the toolbar 504.

According to some embodiments, another toolbar 508 is provided above theUI viewport 502. Optionally, the buttons available in the toolbar 508vary depending on whether an object is selected and/or the type of theobject. For instance, in the example of FIG. 5A, none of the objects101-103 displayed in the UI 500 is selected. In this example, variousbuttons 510, 512, 514, 516 provided in the toolbar 508 permit a user toconfigure default settings for new objects created in the UI 500. Thesettings of each object created in the UI 500, whether default settingsor otherwise, determine the attributes defined by the information sets402, 404 (FIG. 4), etc. of the intermediate data structure 400 (FIG. 4)representing the object.

In the illustrated embodiment of FIG. 5A, the user can use the buttons510, 512, 514, 516 provided in the toolbar 508 to set default textsettings, default block settings, default line settings and/or defaulttheme settings. In more detail, the buttons 510 are used to set defaulttext settings such as color, font, emphasis (e.g.,bold/italic/underline), or size of the text included in new objects. Thebuttons 512 are used to set default block settings such as fill color,outline color, or outline thickness of new block objects. The buttons514 are used to set default line settings such as line color, linethickness, line gradient, or line style (e.g., curved, elbow, direct) ofnew connectors. The buttons 516 are used to set default theme settingssuch as corner style (e.g., square, soft, rounded) and fill gradientstyle (e.g., no gradient, soft gradient, strong gradient) of newobjects. The particular default settings of FIG. 5A and the settings ofFIGS. 5B and 5C are described by way of example only and should not beconstrued to limit the invention.

Alternately, in the example of FIG. 5B, the third object 103 has beenselected, indicated by highlighting surrounding the third object 103.Accordingly, the toolbar 508 in FIG. 5B provides buttons 518, 520 thatpermit a user to configure settings of the selected third object 103without affecting the settings of the first or second objects 101, 102.Some of the buttons 518 are analogous to some of the buttons 510 of FIG.5A and can be used to set text settings such as color, font, emphasis,or size and can additionally be used to set alignment (e.g., left,center, right) of the text included in the selected third object 103.The buttons 520 are analogous to the buttons 512 of FIG. 5A and can beused to set block settings such as outline color, outline thickness orfill color of the selected third object 103.

Alternately, in the example of FIG. 5C, the second object 102 has beenselected, indicated by highlighting surrounding the second object 102.Accordingly, the toolbar 508 in FIG. 5C provides buttons 522, 524 thatpermit a user to configure settings of the selected second object 102without affecting settings of the first or third objects 101, 103. Someof the buttons 522 are analogous to the buttons 510 of FIG. 5A and canbe used to set text settings such as font, emphasis, or size of textincluded in the selected second object 102. Some of the buttons 524 areanalogous to some of the buttons 514 of FIG. 5A and can be used to setline settings such as line color, line thickness, line gradient, or linestyle and can additionally be used to set beginning/end styles (e.g.,none, arrow, hollow arrow, open arrow) of the selected second object 102or to edit the shape of the selected second object 102 as discussed withrespect to FIGS. 5H and 5I below.

Referring to FIG. 5B, the third layer 106 within which the third object103 is rendered is denoted by the dashed line surrounding the thirdobject 103. Although dashed lines are provided in FIGS. 1, 5B and otherFigures herein for use in identifying some or all of the layers 104-106,in certain embodiments of the invention layers are not generally visiblein the UI 500 to a user and are merely provided in the Figures forconvenience in describing aspects of the invention.

In some embodiments, objects, such as the third object 103, are renderedon the UI 500 with reference to the corresponding layer, such as thethird layer 106. For instance, the size and position of the layer maycorrespond to the size and position of the object. In these and otherembodiments, for example, as a user manipulates the third object 103 thethird layer 106 may also change accordingly. In this regard, the layercontaining the object may include one or more controls that can be usedto manipulate the layer and the object. Further, according to someembodiments, the controls are positioned in certain areas of the layerand may be highlighted in response to certain user input. For instance,the controls may be highlighted in response to a user selecting theobject, in response to the mouse cursor 107 hovering over an areacorresponding to the control, or both.

In the illustrated embodiment of FIG. 5B, for example, the third layer106 includes resizing controls 526A-526D (collectively “resizingcontrols 526”) disposed at the four corners of the third layer 106, andcertain connection controls 528A-528D (collectively “connection controls528”) disposed in the third layer 106 near the four corners of the thirdobject 103. In this example, the resizing controls 526 and connectioncontrols 528 are highlighted in response to a user selecting the thirdobject 103.

The resizing controls 526 can be used to resize the third layer 106 andthe third object 103 by, e.g., a user moving the mouse cursor 107 to oneof the resizing controls 526, depressing the left mouse button while themouse cursor 107 is hovering over the resizing control 526, dragging themouse cursor 107 and resizing control 526 in a direction effective toresize the third layer 106, and releasing the left mouse button when thethird layer 106 is a desired size. For example, clicking and draggingresizing control 526A to the left and/or upwards increases the size ofthe third layer 106 and third object 103, while clicking and draggingresizing control 526A to the right and/or downwards decreases the sizeof the third layer 106 and third object 103.

The action of a user depressing a mouse button, dragging the mousecursor 107 to a different location and releasing the mouse button may bereferred to herein as “clicking and dragging.” Depending on the inputdevice involved and/or the configuration of the input device, otheractions of a user may similarly result in a click and drag action.

The connection controls 528 can be used to attach a connector to thethird layer 106, and thus the third object 103 by, e.g., a userpositioning the mouse cursor 107 over one of the connection controls528, and clicking and dragging the mouse cursor 107 to a terminallocation where the resulting connector terminates. In some embodiments,the resulting connector is rendered in the UI 500 after the mouse cursor107 has been dragged a predetermined distance from the connectioncontrol 528, the resulting connector beginning at the connection control528 and terminating at the mouse cursor 107. Alternately oradditionally, until the left mouse button is released and while the useris dragging the mouse cursor 107 about the UI 500, the resultingconnector is continuously re-rendered in the UI 500 and terminates at alocation near the moving mouse cursor 107 each time it is re-rendered.

In the example of FIG. 5B, the resizing controls 526 and certainconnection controls 528 are highlighted in response to a user selectingthe third object 103. Alternately or additionally, resizing controls526, connection controls 528 and/or a translation control arehighlighted in response to the mouse cursor 107 hovering over an areacorresponding to the control, whether or not the object has beenselected.

In FIG. 5D, for instance, resizing controls 530 at the four corners ofthe first layer 104 (only one resizing control 530 is labeled in FIG.5D) and connection controls 532 on the first layer 104 at the four sidesof the first object 101 (only one connection control 532 is labeled inFIG. 5D) may appear in response to the mouse cursor 107 hovering overany portion of the first layer 104, even though the first object 101 hasnot been selected. In some embodiments, the display of the resizingcontrols 530 and connection controls 532 in response to the mouse cursor107 hovering over any portion of the first layer 104 visually indicateswhere the mouse cursor 107 can be moved to enable corresponding controlof the first layer 104 and first object 101.

The display of the resizing controls 530 and connection controls 532 inthe UI viewport 502 serves to highlight some of the controls availablefor the first layer 104 and first object 101. Alternately oradditionally, a specific control that can be activated in a particulararea may be highlighted by altering the appearance of the mouse cursor107 when the mouse cursor 107 is hovering over the particular area tothereby indicate that the corresponding control can be activated whilethe mouse cursor 107 is in the particular area.

For instance, in response to the mouse cursor 107 hovering over an areaof the first layer 104 near one of the resizing controls 530, the mousecursor 107 may be altered to appear as a resizing cursor 107A thatvisually indicates to a user that the first layer 104 and first object101 can be resized by clicking and dragging anywhere in the area inwhich the mouse cursor 107 appears as a resizing cursor 107A.

Alternately or additionally, in response to the mouse cursor 107hovering over an area of the first layer 104 near one of the connectioncontrols 532, the mouse cursor 107 may be altered to appear as aconnection cursor 107B that visually indicates to a user that aconnector can be connected to and/or initiated from the first layer 104and first object 101 by clicking anywhere in the area in which the mousecursor 107 appears as the connection cursor 107B. In response todragging the connection cursor 107B—which may continue to appear as theconnection cursor 107B or return to appear as the mouse cursor 107during the drag—to a terminal location, a connector may be created thatis connected to the first layer 104 and first object 101 at a connectionpoint in the area where the click occurred and that terminates at theterminal location.

It should be noted that, although connection controls 528 are shown asdiscrete points on the corners of the third layer 106 and third object103 in FIG. 5B, and connection controls 532 are shown as discrete pointson the four sides of the first layer 104 and first object 101 in FIG.5D, in some embodiments of the invention connection controls may beprovided in one or more additional locations and/or different locationsthan are shown in FIGS. 5B and 5D. For example, connection controls maybe provided at additional discrete points located along one or moreedges of an object or corresponding layer. Alternately or additionally,connection controls may be provided continuously along one or more edgesof an object or corresponding layer. Additional detail regarding thisand other aspects of some example embodiments are provided below withrespect to FIG. 5K.

Alternately or additionally, in response to the mouse cursor 107hovering over an area of the first layer 104 that is more than apredetermined distance from the nearest resizing control 530, connectioncontrol 532, or text field of the first object 101, the mouse cursor 107may be altered to appear as a translation cursor 107C. The translationcursor 107C visually indicates to a user that the first layer 104 andfirst object 101 can be moved to a different location in the UI viewport502 by clicking anywhere in the area in which the mouse cursor 107appears as the translation cursor 107C. In response to dragging thetranslation cursor 107C—which may continue to appear as the translationcursor 107C or return to appear as the mouse cursor 107 during thedrag—the first layer 104 and first object 101 are moved about the UIviewport 502 wherever the cursor 107C or 107 is dragged.

While FIG. 5D simultaneously illustrates four different cursors, e.g.,mouse cursor 107, resizing cursor 107A, connection cursor 107B, andtranslation cursor 107C, generally, only a single a cursor 107, 107A,107B or 107C appears in the UI 500 at any given time according to someembodiments. The cursors 107, 107A, 107B and 107C are simultaneouslyillustrated in FIG. 5D as a matter of convenience to avoid the need foradditional drawings and to illustrate that the appearance of the mousecursor 107 may vary depending on whether the mouse cursor 107 ishovering over a layer and/or the particular area of the layer over whichthe mouse cursor 107 is hovering.

FIG. 5E illustrates how creation of a document including objects can bestreamlined according to some aspects of the invention. For instance, inresponse to a user positioning the mouse cursor 107 over the connectioncontrol 528A of the third object 103 and clicking and dragging the mousecursor 107 to the terminal location where the mouse cursor 107 ispositioned in FIG. 5E, a connector 534 is automatically created withoutthe user previously manually selecting a connector drawing mode. As seenin FIG. 5E, the connector 534 begins at and is connected to the thirdobject 103 at a connection point corresponding to the connection control528A and terminates near the terminal location of the mouse cursor 107.

Optionally, first predetermined text 536 is automatically populated inthe connector 534 based on the object to which the connector 534 isconnected and/or whether any other connectors 534 have already beencreated that are connected to the third object 103. In this case,whereas the third object 103 is a decision block in a flowchart anddecision blocks are often followed by a “Yes” path and a “No” path, thefirst connector 534 may be automatically populated with the text “Yes”while the next connector that is connected to the third object 103 maybe automatically populated with the text “No.” Alternately, the firstconnector 534 can be automatically populated with the text “No” whilethe next connector can be automatically populated with the text “Yes.”Alternately or additionally, a user can configure connectors that areconnected to decision blocks (or other objects) to automaticallypopulate with some other predetermined text besides “Yes” or “No.”

Alternately or additionally, in response to the user releasing the mousecursor 107 at a desired terminal location for terminating the connector534, a set 538 of objects are presented in the UI viewport 502 to theuser near the terminal location or elsewhere in the UI viewport 502. Incertain embodiments, the set 538 of objects is presented to the user ina new pop-up or context menu. The set 538 of objects may include objectsthat are likely to be added to the document and connected to theconnector 534 based on the objects 101-103 and/or 534 already includedin the document, the type of diagram or document being drawn, userhistory or preferences, settings, object libraries that are open or havebeen recently or frequently used, etc. For instance, in the exampleillustrated by FIG. 5E, because all of the objects 101-103 and 534 areflowchart objects, indicating that the user is creating a flowchart, theset 538 of objects presented in the UI viewport 502 near the terminallocation may include flowchart objects.

After the set 538 of objects is presented in the UI viewport 502, theuser can select a particular object from the set 538. In response to theuser selection, the selected object is created, connected to theconnector 534 near the terminal location and rendered in the UI viewport502. For instance, the object presented at the upper left corner of theset 538 of objects represents a process block. If the user selects therepresentation of the process block, the process block 540 of FIG. 5F iscreated, connected to the connector 534 near the terminal location andrendered in the UI viewport 502. According to certain embodiments of theinvention, the ordering and appearance of objects within the set 538 ofobjects may be automatically adjusted based on detecting a user'shistory or preferences using techniques now known or later developed, orbased on selections by users. For example, if a user frequently uses acertain type of object with a certain type of border color, fill color,and/or text style/size/color, the user may add an object with theseproperties to the set 538 of objects, or such an object may be addedautomatically.

FIG. 5F additionally illustrates an example of an alignment hint that isprovided according to some embodiments while an object is beingrepositioned. In the example of FIG. 5F, a decision block 542 is in theprocess of being repositioned. The decision block includes both avertical axis 544 and a horizontal axis 546. The first object 101similarly includes a vertical axis 548 and a horizontal axis (not shown)that is collinear with alignment hint line 550. As the user isrepositioning the decision block 542, the alignment hint line 550 may beautomatically displayed in the UI viewport 502 when the horizontal axis546 of the decision block 542 is within a predetermined distance fromthe horizontal axis of the first object 101. In some examples, if theuser releases the decision block 542 while the alignment hint line 550is displayed, the decision block 542 is snapped into alignment with thefirst object 101 such that the horizontal axis 546 is collinear with thealignment hint line 550.

Vertical alignment hint lines are alternately or additionally displayedwhen the decision block 542 is being moved above or below the firstobject 101 and the vertical axis 544 of the decision block 542 comeswithin a predetermined distance from the vertical axis 548 of the firstobject 101. More generally, vertical, horizontal, and/or other alignmenthint lines are displayed in some examples when a first object is beingmoved about and a vertical, horizontal, or other axis of the firstobjects comes within a predetermined distance of a correspondingvertical, horizontal, or other axis of a second object.

FIG. 5G illustrates an example of an indicator that can be provided inthe UI viewport 502 to indicate the ability to link a connector toanother object. In particular, a connector 552 connected to the firstobject 101 is created by clicking on the connection control 532 of thefirst object 101 and dragging the mouse cursor 107 to a desired terminallocation. In this case, the terminal location is near an upperconnection control 556 of the decision block 542.

In the illustrated embodiment of FIG. 5G, an indicator 558 including acircle centered on and highlighting the upper connection control 556 isdisplayed when the mouse cursor 107 comes within a predetermined areasurrounding the upper connection control 556 while the connector 552 isbeing dragged about the UI viewport 502. The indicator 558 provides avisual indication of an ability to link the connector 552 to thedecision block 542 at a connection point corresponding to the upperconnection control 556. Releasing the connector 552 while the indicator558 is displayed may serve as confirmation by the user that the userdesires to link the connector 552 to the decision block 542 at the upperconnection control 556. As discussed previously, according to someembodiments of the invention connection controls may be locatedcontinuously along the edges of objects (e.g. decision block 542), andtherefore the connection controls illustrated in FIG. 5 are arepresentative set (and not an exhaustive set) of connection controls.

Optionally, and as seen in FIG. 5G, while the connector 552 is beingdragged about the UI viewport 502, some connection controls on some orall of the objects in the UI viewport 502 are displayed to provide apreliminary indication to the user of at least some potential terminallocations for the connector 552.

FIGS. 5H and 5I illustrate an example of line editing of connectors,such as the connector 552, that is provided according to someembodiments. In these and some other embodiments, curved lines such asthe connector 552 may be represented with sets of quadratic Beziercurves that automatically curve to look correct in their approach toblocks they are attached to.

According to certain embodiments, when the connector 552 is firstcreated, it has two control points 560, 562, one each at the beginningand end of the connector 552. In response to the user selecting a lineediting mode, a control bar 564, 566 passing through each control point560, 562 is displayed in the UI viewport 502. The angle of each controlbar 564, 566 in some embodiments generally determines the angle of theconnector 552 as it approaches the corresponding control point 560, 562.The length of each control bar 564, 566 may generally determine theamount of length of the connector 552 that approaches the correspondingcontrol point 560, 562 at about the determined angle.

By clicking on and rotating the control bar 564, 566 about thecorresponding control point 560, 566, the user can change the angle ofthe control bar 564, 566, and thus the angle of the connector 552 as itapproaches the corresponding control point 560, 562. Alternately oradditionally, by clicking on and resizing the ends of the control bar564, 566, the user can change the amount of length of the connector 552that approaches the corresponding control point 560, 562 at about thedetermined angle. For instance, FIG. 5I illustrates an example in whichthe angles and lengths of both control bars 564, 566 have been modifiedand further illustrates the corresponding changes to the connector 552.

Alternately or additionally, the user can add new control points, suchas the user-added control point 568, by, e.g., clicking at a desiredlocation on the connector 552 for the control point 568. The user-addedcontrol point 568 may generally define a point in the UI viewport 502through which the connector 552 passes. Optionally, the user-addedcontrol point 568 can be repositioned by clicking and dragging on theuser-added control point 568. Additionally, a control bar 570 associatedwith the user-added control point 568 may provide the same functions asthe control bars 564, 566 associated with control points 560, 562.

FIG. 5J illustrates an example of the handling of crossing connectors102, 572 according to some embodiments. As seen in FIG. 5J, theconnector 572 crosses over the second object 102 which is also aconnector. The connector 572 includes a jump feature 574 to indicatethat the connector 572 crosses over and is not connected to the secondobject 102.

In some examples, a jump feature such as the jump feature 574 is addedto a particular connector such as the second object 102 when a differentconnector such as the connector 572 is created that crosses over theparticular connector or is repositioned such that it crosses over theparticular connector. Thus, even though none of the attributes of theparticular connector have been changed by the creation or repositioningof the different connector, the creation or repositioning of thedifferent connector may nevertheless affect how the final renderedexisting connector appears. Accordingly, some embodiments track whichconnectors have changed since a previous rendering and additionally runa preprocessing routine that identifies any other connectors that mayhave been affected by the changes.

The preprocessing routine may include one or more tests to determinewhether two connectors actually intersect such that a jump featureshould be added to one or the other. For instance, the preprocessingroutine can include a computationally heavy connector intersection testto determine whether two connectors actually intersect. Alternately oradditionally, the preprocessing routine includes a computationallysimple axis-aligned bounding box (“AABB”) test to determine if twoconnectors potentially overlap, followed by the actual connectorintersection test on positives of the AABB test. Alternately oradditionally, the AABB test can be followed up with a second AABB testin a rotated coordinate frame to eliminate false positives from thefirst AABB test, followed by the actual connector intersection test ononly the positives from the second AABB test.

All connectors that are found to overlap may be marked as changed and,at render time, some amount of reprocessing is done on the markedconnectors to determine if an update of the connector is needed. Whilethe preprocessing routine has been described in the context ofoverlapping connectors, the preprocessing routine is more generallyapplicable to any set of objects that potentially overlap one another.

Connection controls have previously been disclosed with respect to,e.g., FIGS. 5B and 5D showing four discrete connection controls 528(FIG. 5B) and 532 (FIG. 5D) at specific locations on each of objects103, 101, respectively. As noted above, however, connection controls incertain embodiments may alternately or additionally be provideddiscretely or continuously at other locations along the edges of anobject.

For example, FIG. 5K illustrates an object 576 including connectioncontrols 578A-578D (collectively “connection controls 578”) located atabout the midpoint along each edge of the object 576. According tocertain embodiments, the object 576 may further include one or moreadditional connection controls located at other discrete locations alongthe edges of the object 576 or that are continuously available at aboutany point along the edges of the object 576.

One such additional connection control 580 located on a lower edge ofthe object 576 is illustrated in FIG. 5K. According to some embodiments,the location of connection control 580 is identified by an indicator 580centered about connection control 580. The indicator 580 may appear whena terminal end 584A of a connector 584 is dragged to within apredetermined distance of the connection control 580. Although FIG. 5Kidentifies the location of a single additional connection control 580beyond connection controls 578, in certain embodiments the object 576has multiple additional connection controls that may be identified by anindicator, such as the indicator 580, when the terminal end of aconnector is dragged to within a predetermined distance of theadditional connection control. Accordingly, embodiments of the inventionpermit objects such as connectors to be connected to virtually anylocation of an object and not solely to one of four discrete connectioncontrols such as the connection controls 528 and 532 of FIGS. 5B and 5D.

According to some embodiments, text included in an object, such as text586 included in connector 572, can be moved along the object andcontinuously updated/rendered in real time as the text is moved around.For example, as shown in FIG. 5K, the text 586 of connector 572 islocated to the right of the second object 102. However, the text 586 maybe moved along the connector 572 to any location along the connector572, such as to a new location to the left of the second object 102 asdepicted in FIG. 5L.

While FIGS. 5K and 5L illustrate the text 586 being located inline withthe connector 572, in other embodiments the text 586 may be locatednear, but not inline with, the connector 572. For instance, the text 586may be moved immediately above, below, to the left, or to the right ofany portion of the connector 572.

FIG. 5L additionally illustrates the connection of one connector 588 toanother connector 572. That is, connectors are not excluded from beingconnected to other connectors. Indeed, connectors and other objects cangenerally be connected to any other connector or other object. In theillustrated embodiment, as a terminal end 588A of connector 588 is movedabout by a user, an indicator 590 may appear when the terminal end 588Ais within a predetermined distance from a point on the connector 572 toindicate that the connector 588 can be connected to the connector 572 atthe point on the connector 572 that the indicator 590 is centered on.

As depicted in FIGS. 5E-5G, and 5J-5K, some connectors, such as theconnectors 534, 572, can include a text field, such as text fields 536(FIG. 5E) and 586 (FIG. 5K). Alternately or additionally, connectors caninclude multiple text fields. For example, as illustrated in FIG. 5L,the connector 584 includes two text fields 592, 594. More generally,each connector can include as few as zero text fields or one or moretext fields, as desired.

Various embodiments of the invention have been described in relation toactions performed by a user with an input device such as a mouse.Alternately or additionally, the embodiments disclosed herein can bedescribed in relation to the user input received by the client devicevia any input device, such as a mouse or a touchscreen interface(including those with multi-touch capability) or the like. Generally,the user input includes data and/or signals indicative of the actionsperformed by the user. Those skilled in the art will appreciate, withthe benefit of the present disclosure, the relation between the actionsperformed by a user with an input device and the user input received bythe client device.

V. Example Methods of Operation

Turning next to FIGS. 6A-7B, various example methods of operation aredescribed according to some embodiments of the invention. One skilled inthe art will appreciate that, for the processes and methods disclosedherein, the acts performed in the processes and methods may beimplemented in differing order than disclosed herein. Furthermore, theoutlined acts and operations are only provided as examples, and some ofthe acts and operations may be optional, combined into fewer acts andoperations, or expanded into additional acts and operations withoutdetracting from the essence of the disclosed embodiments.

FIG. 6A is a flowchart of an example method 600 for rendering graphicalobjects on a display of a client device, such as the display 332 andclient device 300 of FIG. 3. Although not required, in some embodiments,the method 600 is executed by the client device in response to theclient device executing a runtime script including instructions forperforming the method 600, the runtime script being provided to theclient device in a web page loaded by a web browser executing on theclient device. Runtime script, such as for example JavaScript, is builtto interact with the native browser, native form elements, and nativeweb functionality. One of the benefits to using Javascript overtechnologies such as Flash is that a JavaScript application can bereadily extended via public application programming interfaces (“APIs”).More generally, however, one or more of the acts described inassociation with the method 600 may be performed by hardware, software,or a combination thereof, as may be embodied by one or more computingsystems such as a client system, a server system, or the like.Additionally, the method 600 will be discussed in the context of theobjects 101-103 and layers 104-106 of FIG. 1, with the understandingthat the method 600 is not limited to the specific embodiment of FIG. 1.

The method 600 begins by rendering 602 a plurality of objects 101-103within respective layers 104-105. The second object 102 is directlylinked to the first object 101 and the third object 103 is directlylinked to the second object 102. According to some embodiments, each ofobjects 101-103 is rendered 602 within respective layers 104-105 basedon corresponding intermediate data structures 400 (FIG. 4) for eachobject 101-103. Alternately or additionally, each of the objects 101-103is rendered by reference to the respective layer 104-105 within whichthe object 101-103 contained.

The method 600 continues by receiving 604 user input manipulating one ofthe objects 101-103 in a manner that affects a directly linked object101-103. In the present example, the user input is effective to move thefirst object 101 from the position shown in FIG. 1 to a new position(not shown). Alternately or additionally, the user input manipulatingthe first object 101 includes user input manipulating the first layer104.

The method 600 proceeds by re-rendering 606 the manipulated first object101 and the second object 102 that is directly linked to the firstobject 101 without re-rendering the third object 103 that is notdirectly linked to the first object 101. In some embodiments, themanipulated first object 101 and directly linked second object 102 arere-rendered substantially in real time while the first object 101 isbeing manipulated.

Although not shown in FIG. 6A, various other acts and operations may beincluded in variations of the method 600. For example, as alreadyindicated above, the layers 104-106 may be slightly larger than theobjects 101-103 contained therein, and each layer 104-106 may include atleast one of a resizing control, translation control, and connectioncontrol. In this example, the method 600 may further include receivinguser input causing a mouse cursor 107 displayed on a display to hoverover an area of a layer 104-106 corresponding to a particular control,and highlighting the particular control, as described with respect toFIG. 5D, for instance.

As another example, each of the first layer 104 and third layer 106 mayinclude connection points corresponding to connection controls 532, 528of the first and third layer 104, 106. Further, the first and thirdobjects 101, 103 may be created prior to creating the second object 102,analogous to the manner in which the first object 101 and decision block542 of FIGS. 5F and 5G were created prior to creating the connector 552of FIG. 5G. In this example, the method 600 may further include, priorto creating and rendering the second object 102, receiving user inputinitiating creation of the second object 102 beginning from a connectionpoint of the first object 101, and receiving user input terminating thesecond object 102 at a connection point of the third object 103, wherethe second object 102 is a connector linked to the first object 101 andthird object 103 at corresponding connection points. In someembodiments, the user input initiating creation of the second object 102from the connection point of the first object 101 represents a useraction of selecting the connection point without previously manuallyselecting a connector drawing mode to draw the second object 102.

Alternately or additionally, and continuing with the example of theprevious paragraph, the method 600 may further include, prior toreceiving user input terminating the second object 102, providing avisual indication, such as the indicator 558 of FIG. 5G, of an abilityto link the second object 102 to the third object 103 at a connectionpoint of the third object 103. The method 600 may additionally includereceiving user input, such as data representing the release of a mousebutton, indicating confirmation that the user desires to link the secondobject 102 to the third object 103 at a connection point of the thirdobject 103, and then linking the second object 102 to the third object103 at a connection point of the third object 103.

As another example, the method 600 may include acts described inrelation to FIGS. 5E-5F and the set 538 of objects displayed in FIG. 5E.For instance, considering some of the acts associated with FIGS. 5E-5Fin the context of FIG. 1, the method 600 may include, prior to renderingthe second and third objects 102-103, receiving user input initiatingcreation of the second object 102 beginning from a connection point ofthe first object 101, the second object 102 having a first end connectedto the connection point of the first object 101 and a second endopposite the first end; receiving user input identifying a terminallocation of the second end of the second object 102; in response toreceiving the user input identifying the terminal location, presentingon the display a set of representations of objects, such as the set 538,for use as the third object 103; and receiving user input including aselection of a representation of the third object 103.

Alternately or additionally, instructions that are executable by acomputing device, such as the client device 300 of FIG. 3, to performthe method 600 or any of the variations described hereinabove can bestored on a physical computer readable storage medium for execution bythe computing device.

FIG. 6B is a flowchart of another example method 650 for renderinggraphical objects on a display of a client device, such as the display332 and client device 300 of FIG. 3. Although not required, in someembodiments, the method 650 is executed by the client device. Moregenerally, however, one or more of the acts described in associationwith the method 650 may be performed by hardware, software, or acombination thereof, as may be embodied by one or more computing systemssuch as a client system, a server system, or the like.

At 652, user input is receiving causing a first object to be renderedwithin a first layer and displayed on a display.

At 654, user input is received causing a second object to be renderedwithin a second layer and displayed on the display. In some embodiments,both of the first and second objects are simultaneously visible to auser after both objects have been rendered.

At 656, user input is received causing a connector to be rendered withina third layer and displayed on the display, the connector connecting thefirst and second objects. Note that in some embodiments, the connectormay be a line that corresponds to a line drawn on the display betweenthe first and second objects, but that in other embodiments of theinvention, the connector may be of another nature and/or may take othershapes or forms.

At 658, user input is received manipulating the first object connectedby the connector to the second object.

At 660, the first object, second object and connector are continuouslyupdated and displayed substantially in real time during the manipulatingof the first object. In some embodiments, act 660 includes continuouslyre-rendering the first object within the first layer and the thirdobject within the third layer without re-rendering the second objectwithin the second layer.

FIG. 7A is a flowchart of an example method 700 for representing andrendering graphical objects on a display of a client device, such as thedisplay 332 and client device 300 of FIG. 3. Although not required, insome embodiments, the method 700 is executed by the client device. Moregenerally, however, one or more of the acts described in associationwith the method 700 may be performed by hardware, software, or acombination thereof, as may be embodied by one or more computing systemssuch as a client system, a server system, or the like.

The method 700 begins by separating 702 information for rendering anobject into a plurality of sets defining attributes of the object, suchas the information sets 402, 404 of FIG. 4. In some embodiments, theobject is configured to render within a particular graphics context ofthe layer. The graphics context of the layer may define, for instance, alocal coordinate frame and/or a scale that may be the same as ordifferent from a global coordinate frame and/or scale defined by a UIviewport in which the object is ultimately rendered.

At 704, the layer is created at a particular position of the UIviewport. The particular position of the UI viewport may correspond to aposition of the UI viewport to where the user drags an object from atoolbar, such as the toolbar 504 of FIG. 5A, or a position of the UIviewport where the user terminates a connector, thereby prompting theuser through a set 538 of representations of objects (FIG. 5E) to selectand create an object near the terminal location, or the like.

At 706, the graphics context of the layer is translated and scaled tomatch the graphics context of the UI viewport.

At 708, the object is rendered at the particular position of the UIviewport within the layer using the global coordinate frame. Rendering708 the object within the layer may include separately rendering theattributes of the object defined by the plurality of sets ofinformation.

Although not shown in FIG. 7A, variations of the method 700 mayadditionally include other acts or operations. For instance, the method700 may further include caching separately rendered attributes of theobject defined by the plurality of sets of information; and in responseto receiving user input modifying a particular attributed defined by aparticular set, re-rendering the particular attribute defined by theparticular set of information without re-rendering other attributesdefined by other sets included in the plurality of sets of information.

Alternately or additionally, instructions that are executable by acomputing device, such as the client device 300 of FIG. 3, to performthe method 700 or any of the variations described hereinabove can bestored on a physical computer readable storage medium for execution bythe computing device.

FIG. 7B is a flowchart of an example method 750 for editing text of anobject that may be combined with the method 700 of FIG. 7A or othermethods disclosed herein. In the example of FIG. 7B, information forrendering the object is separated into a plurality of sets including atleast one set of information defining a rich text area of the objectincluding a canonical representation of text.

At 752, the canonical representation of the text is translated to richtext.

At 754, user input effective to edit the rich text is received through arich-text editor. The rich-text editor is a web browser-based editoraccording to some embodiments.

At 756, the edited rich text is translated into a canonicalrepresentation of the edited rich text.

In some embodiments, the canonical representation of the text is an XMLrepresentation of the text. Alternately or additionally, the rich textis an HTML representation of the text.

FIG. 8 is a flowchart of an example method 800 for rendering graphicalinformation on a display of a client device, such as the display 332 andclient device 300 of FIG. 3. Although not required, in some embodiments,the method 800 is executed by the client device. More generally,however, one or more of the acts described in association with themethod 800 may be performed by hardware, software, or a combinationthereof, as may be embodied by one or more computing systems such as aclient system, a server system, or the like.

The method 800 begins by storing 802 data for rendering a graphicalobject in an intermediate data structure including a plurality ofinformation items defining attributes of the graphical object. Oneexample of an intermediate data structure is provided in FIG. 4 at 400.Various example information items are also provided in FIG. 4 at 406,408, 410, 412, 414, 416, 418, 420, 422.

At 804, the attributes of the graphical object are rendered based on theinformation items.

At 806, the graphical object is displayed on a display based on therendered attributes.

At 808, user input is received that causes at least some of theinformation items to change.

At 810, based on the changed information items, some, but not all, ofthe attributes of the graphical object are re-rendered. The act 810 mayinclude, for example, determining whether each of the attributes of thegraphical object is affected by the changed information items andre-rendering only those attributes that are determined to be affected bythe changed information items. Alternately or additionally, act 810 mayinclude re-rending an outline of the graphical object withoutre-rendering a rich text are of the graphical object. Alternately oradditionally, act 810 may include re-rendering a rich text area of thegraphical object without re-rendering an outline of the graphicalobject.

Alternately or additionally, instructions that are executable by acomputing device, such as the client device 300 of FIG. 3, to performthe method 800 or any of the variations described hereinabove can bestored on a physical computer readable storage medium for execution bythe computing device.

In view of the disclosure provided above, those skilled in the art willappreciate that some embodiments disclosed herein enable objects to bere-rendered virtually instantly in response to user commands without theprocessing delays associated with re-rendering objects in someapplications. The ability to re-render objects virtually instantly canbe leveraged to enable live “demonstrations” of products that implementsome of the methods disclosed herein.

In this regard, it is noted that many websites and applications offervideo demonstrations of how a particular application or service works.Many of these demonstrations include pre-recorded video that is a videoscreen capture showing the application interface, how the applicationresponds, and how to use the application to accomplish certain desiredactions or results.

According to some embodiments, however, an actual live demonstration canbe provided on a client device for a user to see an application inaction. In other words, rather than the demonstration being a mere videoscreen capture, the demonstration is an actual execution of theapplication using simulated user actions to show the application inaction.

FIG. 9 is a flowchart of an example method 900 for demonstrating theoperation of an application as just explained. The method 900 begins insome embodiments after a user opens a web page using a web browserexecuting on a client device to access the application and is presentedwith or selects an option to view a demonstration of the application.

At 902, user input effective to initiate the demonstration of theapplication is received, e.g., by the client device. At 904, thedemonstration is initiated by generating input for the application basedon simulated user actions.

The generated input is provided to the application which is executed 906using the generated input to provide a demonstration of the applicationin action. In some embodiments, executing 906 the application using thegenerated input includes creating and rendering a plurality of graphicalobjects on a display connected to the computing device in response tofirst generated input, and in response to second generated inputeffective to manipulate one or more of the plurality of graphicalobjects, updating and re-rendering on the display one or more of theplurality of graphical objects affected by the manipulationsubstantially in real time as the manipulation occurs.

Although not shown in FIG. 9, the method 900 may further includepresenting an indication on the display that the demonstration isfinished, and allowing a user to edit the plurality of graphical objectscreated during the demonstration.

The user actions simulated in the method 900 of FIG. 9 may include, forinstance, mouse clicks and movements, key presses for typing text from akeyboard, finger swipes for touchscreen interfaces (including multipleconcurrent swipes for multi-touch interfaces), etc. Additionally, theinput generated from the simulated user actions is the same as the userinput that would result from the user actually performing the simulateduser actions.

In some embodiments, simulating a user action includes displaying outputcorresponding to the user action on a display. For example if the useraction being simulated is a mouse click, the appearance of a mousecursor displayed on the display may change to indicate that a mouseclick occurred. Alternately or additionally, if the user action beingsimulated is a mouse movement, the mouse cursor displayed on the displaymay move across the display. Similarly, if the user action beingsimulated is a finger swipe, an indication of a swiping action mayappear on the display. Alternately or additionally, if the user actionbeing simulated is typing on a keyboard, text may appear on the display.

Accordingly, the user viewing the demonstration experiences an actualexecution of the application where all the steps that are required toperform certain actions in the application necessarily happen right infront of the user since the application is actually being executed. Incontrast, a video representation of an execution of an application maybe edited and/or may omit certain steps such that it does not accuratelyrepresent the application.

Additionally, when an application is updated, a video demonstration ofan earlier version of the application may become outdated and shouldalso be updated to accurately reflect the newer version of theapplication. According to embodiments of the live demonstrationdisclosed herein, however, there is no video demonstration to update.Instead, when the application is updated, the live demonstration is alsonecessarily updated since the live demonstration includes execution ofthe application.

Further, from the point of view of a user viewing a video demonstration,the video demonstration may show a user how to use an application tocreate application output, such as a document, but the videodemonstration itself does not produce the application output. Forinstance, while the video demonstration may show the user how to use anapplication to produce or edit a document, the video demonstration doesnot create an actual document that can be edited or otherwise used bythe user. In contrast, because embodiments of the live demonstrationdescribed herein actually execute the application during thedemonstration, any document or object created or edited during thedemonstration becomes available to be edited or used by the user whenthe demonstration terminates.

Returning to FIG. 9, in some embodiments, the live demonstration occurswithin a web browser that downloads a web page including theapplication. Because the user can control some aspects of the browserwindow, such as the size of the browser window, some embodiments of themethod 900 may further include detecting the size of the browser window,and prior to the application outputting any visual output during thedemonstration, scaling the visual output based on the detected size ofthe window.

Alternately or additionally, some embodiments of a UI presented to theuser in response to execution of the application present differentobject libraries that can be collapsed and/or hidden by the user, asdiscussed above with respect to FIGS. 5A-5C and the button 506. In somecases, a live demonstration may involve objects from particular objectlibraries. As such, the method 900 of FIG. 9 may further includedetermining whether one or more object libraries including objects usedin the live demonstration are available in the UI, and updating the UIto display the one or more object libraries if necessary.

Those skilled in the art will appreciate, with the benefit of thepresent disclosure, that the invention disclosed herein can beimplemented in many different scenarios. For instance, an examplewebsite may allow users to drag and drop images of products into aelectronic collage or other document. The products may be, for instance,apparel and accessories or other products. The principals disclosedherein can easily be applied to improve the rendering speed of such awebsite when a user drags new images into a collage, makes changes toexisting images already in the collage, connects images together, viewsa demonstration of how the website works, or the like or any combinationthereof. The foregoing is only one specific example of a specificapplication of some of the principles of the present invention and thoseskilled in the art will appreciate how to apply the principals of thepresent invention in other situations.

VI. General Aspects of Example Embodiments

Those skilled in the art will appreciate, with the benefit of thepresent disclosure, that the embodiments described herein can be adaptedfor alternative implementations beyond those explicitly disclosedherein. For example, while some embodiments have been described asmethods implemented by instructions of a runtime script provided in aweb page executed in a web browser, the methods or variations thereofcan alternately be implemented in a proprietary plugin to obtain similarbenefits to those described herein.

As another example, some of the methods described herein are optimizedfor a raster-based canvas implementation. However, the methods orvariations thereof can be adapted for tag-based vector representationsin a web browser, such as the Scalable Vector Graphics (“SVG”)representation, through careful use of container elements, for instance.

The embodiments described herein may include the use of a specialpurpose or general-purpose computer including various computer hardwareor software modules, as discussed in greater detail below.

Embodiments within the scope of the present invention also includecomputer-readable media for carrying or having computer-executableinstructions or data structures stored thereon. Such computer-readablemedia can be any available media that can be accessed by a generalpurpose or special purpose computer. By way of example, and notlimitation, such computer-readable media include physical computerreadable storage media such as RAM, ROM, EEPROM, CD-ROM or other opticaldisk storage, magnetic disk storage or other magnetic storage devices,or any other physical medium which can be used to carry or store desiredprogram code means in the form of computer-executable instructions ordata structures and which can be accessed by a general purpose orspecial purpose computer. When information is transferred or providedover a network or another communications connection (either hardwired,wireless, or a combination of hardwired or wireless) to a computer, thecomputer properly views the connection as a computer-readable medium.Thus, any such connection is properly termed a computer-readable medium.Combinations of the above should also be included within the scope ofcomputer-readable media.

Computer-executable instructions include, for example, instructions anddata which cause a general purpose computer, special purpose computer,or special purpose processing device to perform a certain function orgroup of functions. Although the subject matter has been described inlanguage specific to structural features and/or methodological acts, itis to be understood that the subject matter defined in the appendedclaims is not necessarily limited to the specific features or actsdescribed above. Rather, the specific features and acts described aboveare disclosed as example forms of implementing the claims.

As used herein, the term “module” or “component” can refer to softwareobjects or routines that execute on the computing system. The differentcomponents, modules, engines, and services described herein may beimplemented as objects or processes that execute on the computing system(e.g., as separate threads). While the system and methods describedherein are preferably implemented in software, implementations inhardware or a combination of software and hardware are also possible andcontemplated. In this description, a “computing entity” may be anycomputing system as previously defined herein, or any module orcombination of modulates running on a computing system.

The present invention may be embodied in other specific forms withoutdeparting from its spirit or essential characteristics. The describedembodiments are to be considered in all respects only as illustrativeand not restrictive. The scope of the invention is, therefore, indicatedby the appended claims rather than by the foregoing description. Allchanges which come within the meaning and range of equivalency of theclaims are to be embraced within their scope.

1. A method for rendering graphical objects on a display, the methodcomprising: rendering each of a plurality of graphical objects withinrespective layers, the plurality of graphical objects including first,second and third graphical objects, the second graphical object beingdirectly linked to the first graphical object and the third graphicalobject being directly linked to the second graphical object; receivinguser input manipulating one of the graphical objects in a manner thataffects a directly linked graphical object; and re-rendering themanipulated graphical object and the directly linked graphical objectwithout re-rendering graphical objects that are not directly linked tothe manipulated graphical object.
 2. The method of claim 1, furthercomprising providing a runtime script in a web page loaded by a webbrowser executing on a client device, the runtime script includingcomputer-executable instructions executable by the client device toperform the method of claim
 1. 3. The method of claim 1, wherein atleast one of the plurality of graphical objects is rendered by referenceto the respective layer within which the at least one of the pluralityof graphical objects is contained, and wherein receiving user inputmanipulating the at least one of the plurality of graphical objectscauses a re-rendering of the respective layer.
 4. The method of claim 1,wherein each layer is larger in size than the graphical object itcontains and includes at least one of a resizing control, a translationcontrol, and a connection control, the method further comprising:receiving user input causing a mouse cursor displayed on the display tohover over an area of a layer corresponding to a particular control; andhighlighting the particular control.
 5. The method of claim 1, whereinthe first graphical object is rendered in a first layer including afirst connection point and the second graphical object is rendered in asecond layer including a second connection point, the method furthercomprising: prior to rendering the third graphical object, receivinguser input initiating creation of the third graphical object beginningfrom the first connection point; and receiving user input terminatingthe third graphical object at the second connection point, the thirdgraphical object comprising a connector linked to the first graphicalobject at the first connection point and to the second graphical objectat the second connection point.
 6. The method of claim 5, furthercomprising, prior to receiving user input terminating the thirdgraphical object at the second connection point: providing a visualindication on the display of an ability to link the connector to thesecond graphical object at the second connection point; receiving userinput including confirmation that the user desires to link the connectorto the second graphical object at the second connection point; andlinking the connector to the second graphical object at the secondconnection point.
 7. The method of claim 5, wherein the user inputinitiating creation of the third graphical object beginning from thefirst connection point represents a user action of selecting the firstconnection point without previously manually selecting a connectordrawing mode.
 8. The method of claim 1, wherein the first graphicalobject is rendered in a first layer including a first connection point,the first graphical object is rendered prior to rendering the secondgraphical object and the second graphical object is rendered prior torendering the third graphical object, the method further comprising:prior to rendering the second graphical object, receiving user inputinitiating creation of the second graphical object beginning from thefirst connection point, the second graphical object comprising aconnector having a first end connected to the first connection point anda second end opposite the first end; receiving user input identifying aterminal location of the second end of the connector; in response toreceiving the user input identifying a terminal location of the secondend of the connector, presenting on the display a set of representationsof graphical objects for use as the third graphical object; andreceiving user input including a selection of a representation of thethird graphical object from the set of graphical objects, the thirdgraphical object being rendered in a second layer including a secondconnection point, wherein the second graphical object is linked to thefirst graphical object at the first connection point and to the thirdgraphical object at the second connection point.
 9. An article ofmanufacture comprising a physical computer readable storage mediumhaving instructions stored thereon that are executable by a computingdevice to perform the method of claim
 1. 10. A method of representingand rendering graphical objects, the method comprising: separatinginformation for rendering a graphical object into a plurality of setsdefining attributes of the graphical object, the graphical objectconfigured to render within a local graphics context of a layer;creating the layer at a particular position of a viewport having aglobal graphics context defining a global coordinate frame; translatingand scaling the local graphics context to match the global graphicscontext; and rendering the graphical object at the particular positionof the viewport within the layer using the global coordinate frame. 11.The method of claim 10, wherein the plurality of sets include a setdefining an outline of the graphical object and wherein a size of thelayer is larger than the defined outline of the graphical object. 12.The method of claim 11, wherein the set defining an outline of thegraphical object defines one or more of a color of a line making up theoutline, a weight of the line making up the outline, a gradient of theline making up the outline, a shape of an area bounded by the outline, afill color of the area bounded by the outline or a transparency level ofthe fill color.
 13. The method of claim 10, wherein the plurality ofsets include a set defining a rich text area of the graphical object.14. The method of claim 13, wherein the set defining a rich text area ofthe graphical object defines one or more of: a bounding box within whichrich text is rendered or a canonical representation of the rich text.15. The method of claim 14, wherein the canonical representation of therich text comprises an Extensible Markup Language (“XML”) representationof the rich text.
 16. The method of claim 13, further comprising:translating the canonical representation to rich text; receiving userinput effective to edit the rich text through a rich-text editor; andtranslating the edited rich text to an edited canonical representation.17. The method of claim 10, wherein rendering the graphical objectcomprises separately rendering the attributes of the graphical objectdefined by the plurality of sets.
 18. The method of claim 17, furthercomprising: caching the separately rendered attributes of the graphicalobject defined by the plurality of sets; and in response to receivinguser input modifying a particular attribute defined by a particular setre-rendering the particular attribute defined by the particular setwithout re-rendering other attributes defined by other sets included inthe plurality of sets.
 19. An article of manufacture comprising aphysical computer readable storage medium having instructions storedthereon that are executable by a computing device to perform the methodof claim
 10. 20. A method of demonstrating the operation of anapplication, the method comprising: receiving, from one or more inputdevices connected to a computing device, user input effective toinitiate a demonstration of an application, the application beingexecutable by the computing device; initiating the demonstration bygenerating input for the application based on simulated user actions;and executing the application using the generated input, including:creating and rendering a plurality of graphical objects on a displayconnected to the computing device in response to first generated input;and in response to second generated input effective to manipulate one ormore of the plurality of graphical objects, updating and re-rendering onthe display one or more of the plurality of graphical objects affectedby the manipulation substantially in real time as the manipulationoccurs while continuously displaying all of the plurality of graphicalobjects unaffected by the manipulation.
 21. The method of claim 20,further comprising: presenting an indication on the display that thedemonstration is finished; and allowing a user to edit the plurality ofgraphical objects created during the demonstration.
 22. The method ofclaim 20, wherein the plurality of graphical objects are rendered withina browser window, the method further comprising: detecting a size of thewindow; and prior to creating and rendering the plurality of graphicalobjects on the display, scaling the plurality of graphical objects basedon the detected size of the window.
 23. A method for rendering graphicalobjects on a display, the method comprising: receiving user inputcausing a first graphical object to be drawn on a display, said firstgraphical object being rendered in a first layer; receiving user inputcausing a second graphical object to be drawn on the display, saidsecond graphical object being rendered in a second layer different fromthe first layer, the first and second graphical objects beingsimultaneously visible on the display; receiving user input causing aconnector to be drawn on the display, the connector connecting the firstand second graphical objects and being rendered in a third layerdifferent from the first and second layers; receiving user inputmanipulating the first graphical object connected by the connector tothe second graphical object; and continuously updating and rendering thefirst graphical object, second graphical object and connector inresponse to and during the manipulating substantially in real time,wherein during the continuous updating and rendering, the firstgraphical object in the first layer is redrawn and the connector in thethird layer is redrawn without redrawing the second graphical object inthe second layer.
 24. A method for rendering graphical information on adisplay, the method comprising: storing data for rendering a graphicalobject in an intermediate data structure including a plurality ofinformation items defining attributes of the graphical object; renderingthe attributes of the graphical object based on the plurality ofinformation items; displaying the graphical object on a display based onthe rendered attributes; receiving user input that causes at least someof the plurality of information items to change; and based on thechanged information items, re-rendering some, but not all, of theattributes of the graphical object.
 25. The method of claim 24, whereinre-rendering some, but not all, of the attributes of the graphicalobject includes: determining whether each of the attributes of thegraphical object is affected by the changed information items; andre-rendering only the attributes of the graphical object determined tobe affected by the changed information items.
 26. The method of claim24, wherein re-rendering some, but not all, of the attributes of thegraphical object includes re-rendering an outline of the object withoutre-rendering a rich text area of the object.
 27. The method of claim 24,wherein re-rendering some, but not all, of the attributes of thegraphical object includes re-rendering a rich text area of the objectwithout re-rendering an outline of the object.